package com.xiaoyushu.oss.biz.controller;

import com.xiaoyushu.framework.biz.context.holder.LoginUserContextHolder;
import com.xiaoyushu.framework.common.response.Response;
import com.xiaoyushu.oss.biz.service.FileService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.awt.*;

@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {
    @Resource
    private FileService fileService;

    @PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Response<?> updaloadFile(@RequestPart(value = "file") MultipartFile file)
    {
        log.info("当前用户 ID:{}", LoginUserContextHolder.getUserId());
        /**
         * 当前用户 ID:null   弯管路由转发到服务的时候，网关层会设置用户ID到请求头中，到那时服务之间调用是通过Feign来完成的，
         * 没有经过网关的，下游服务在去请求头中获取用户ID 自然拿不到
         *
         * 解决方案：
         * 可以为Feign单独配置一个请求拦截器，在调用其他服务时， 将当前用户 ID添加到请求头中，
         * 保证下游服务也能通过上下文组件拿到用户ID
         */
        return fileService.uploadFile(file);
    }

}
